Skip to content

Method: lambda$hatPassendeMitarbeiterBelegung$4(Maschine, MaschinenBelegungEintrag, MenschBelegungEintrag)

1: package simulation.SimulationsHelper;
2:
3: import maschine.Maschine;
4: import rollenbelegung.ErmittelteBelegungen;
5: import rollenbelegung.MaschinenBelegung;
6: import rollenbelegung.MitarbeiterBelegung;
7: import util.Pair;
8: import zeit.eintraege.MaschinenBelegungEintrag;
9: import zeit.eintraege.MenschBelegungEintrag;
10:
11: import java.util.ArrayList;
12: import java.util.Collection;
13: import java.util.Map;
14: import java.util.stream.Collectors;
15:
16: /**
17: * Helperklasse, welche überprüft ob es zu jedem {@link MaschinenBelegungEintrag} einen passenden {@link MenschBelegungEintrag} gibt und vice versa.
18: * Alle Einträge bei denen dies nicht der Fall ist, werden ermittelt.
19: */
20: public final class BelegungsHelper {
21:
22: private BelegungsHelper() {
23:                 // nur über create Methode erstellbar
24: }
25:
26: /**
27: * @return den erstellten Helper.
28: */
29: public static BelegungsHelper create() {
30: return new BelegungsHelper();
31: }
32:
33: /**
34: *
35: * @param ermittelteBelegungen Belegungen der Maschinen und Mitarbeiter
36: * @return Einträge, zu dem es keinen passenden jeweils anderen Eintrag gibt.
37: */
38: public Pair<Collection<MaschinenBelegungEintrag>, Collection<MenschBelegungEintrag>> ermittleFehlendeBelegungen(
39: final ErmittelteBelegungen ermittelteBelegungen) {
40: final Collection<MaschinenBelegungEintrag> maschinenBelegungen = new ArrayList<>();
41: for (final Maschine maschine : ermittelteBelegungen.getMaschinenbelegungen().keySet()) {
42: maschinenBelegungen.addAll(ermittelteBelegungen.getMaschinenbelegungen().get(maschine).getBelegung().stream()
43: .filter(maschinenBelegungEintrag -> !this.hatPassendeMitarbeiterBelegung(maschine,
44: maschinenBelegungEintrag,
45: ermittelteBelegungen.getMitarbeiterbelegungen().values()))
46: .collect(Collectors.toSet()));
47: }
48:
49: final Collection<MenschBelegungEintrag> mitarbeiterBelegungen =
50: ermittelteBelegungen.getMitarbeiterbelegungen().values().stream()
51: .flatMap(mitarbeiterBelegung -> mitarbeiterBelegung.getBelegung().stream())
52: .filter(menschBelegungEintrag -> !this.hatPassendeMaschinenBelegung(menschBelegungEintrag,
53: ermittelteBelegungen.getMaschinenbelegungen()))
54: .collect(Collectors.toSet());
55:
56: return Pair.create(maschinenBelegungen, mitarbeiterBelegungen);
57: }
58:
59: private boolean hatPassendeMitarbeiterBelegung(final Maschine maschine,
60: final MaschinenBelegungEintrag maschinenBelegungEintrag,
61: final Collection<MitarbeiterBelegung> mitarbeiterbelegungen) {
62: return mitarbeiterbelegungen.stream()
63: .flatMap(mitarbeiterBelegung -> mitarbeiterBelegung.getBelegung().stream())
64: .anyMatch(menschBelegungEintrag ->
65:• menschBelegungEintrag.getMaschineDieBedientWird().equals(maschine)
66:• && menschBelegungEintrag.gleicherZeitraumUndProduktionsauftrag(maschinenBelegungEintrag));
67: }
68:
69: private boolean hatPassendeMaschinenBelegung(final MenschBelegungEintrag menschBelegungEintrag,
70: final Map<Maschine, MaschinenBelegung> maschinenbelegungen) {
71: for (final Map.Entry<Maschine, MaschinenBelegung> maschineUndBelegungen : maschinenbelegungen.entrySet()) {
72: if (maschineUndBelegungen.getKey().equals(menschBelegungEintrag.getMaschineDieBedientWird())) {
73: final boolean matches = maschineUndBelegungen.getValue().getBelegung().stream()
74: .anyMatch(maschinenBelegungEintrag -> maschinenBelegungEintrag.gleicherZeitraumUndProduktionsauftrag(menschBelegungEintrag));
75: if (matches) {
76: return true;
77: }
78: }
79: }
80: return false;
81: }
82: }